const fp = require("lodash/fp");

//数据
//horsepower马力，dollar_value价格，，in_stock库存

const cars = [
  {
    name: "Ferrari FF",
    horsepower: 600,
    dollar_value: 700000,
    in_stock: true,
  },
  {
    name: "Spyker C12 Zagato",
    horsepower: 650,
    dollar_value: 648000,
    in_stock: false,
  },
  {
    name: "Jaguar XKR-S",
    horsepower: 550,
    dollar_value: 132000,
    in_stock: false,
  },
  {
    name: "Audi R8",
    horsepower: 525,
    dollar_value: 114200,
    in_stock: false,
  },
  {
    name: "Aston Martin One-77",
    horsepower: 750,
    dollar_value: 1850000,
    in_stock: true,
  },
  {
    name: "Pagani Huayra",
    horsepower: 700,
    dollar_value: 1300000,
    in_stock: false,
  },
];
//练习1--------------------------start
const return_prop = (prop) => {
  return (item) => {
    return fp.prop(prop, item);
  };
};

let isLastInstock = fp.flowRight(return_prop("in_stock"), fp.last);
// console.log(isLastInstock(cars));
//练习1--------------------------end

//练习2--------------------------start
let firstCarName = fp.flowRight(return_prop("name"), fp.first);
// console.log(firstCarName(cars));
//练习2--------------------------end

//练习3--------------------------start
let _average = function (xs) {
  return fp.reduce(fp.add, 0, xs) / xs.length;
};

let returnPropArr = (prop) => {
  return (arr) => {
    return fp.map((car) => {
      return car[prop];
    }, arr);
  };
};

let averageDollarValue = fp.flowRight(_average, returnPropArr("dollar_value"));
// console.log(averageDollarValue(cars));
//练习3--------------------------end

//练习4--------------------------start
const log = (value) => {
  console.log(value);
};

let _underscore = fp.replace(/\W+/g, "_");
let _firstLetterToLowerCase = (str) => {
  return str.replace(str[0], fp.toLower(str[0]));
};
let sanitizeNames = fp.flowRight(
  fp.join("_"),
  fp.map(_firstLetterToLowerCase),
  fp.split("_"),
  _underscore
);
console.log(sanitizeNames(["Hello World"]));
//练习4--------------------------end
